home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Demos / Bowers Development / AppMaker 2.0b5 / Examples / Procedural / AMReminder / MainMenu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-19  |  3.9 KB  |  207 lines  |  [TEXT/MMCC]

  1. /* MainMenu.c */
  2. /* Created 01/01/95 12:01 PM by AppMaker */
  3.  
  4. #include <Types.h>
  5. #include <Quickdraw.h>
  6. #include <Controls.h>
  7. #include <Dialogs.h>
  8. #include <Events.h>
  9. #include <Lists.h>
  10. #include <LowMem.h>
  11. #include <Menus.h>
  12. #include <TextEdit.h>
  13. #include "Globals.h"
  14. #include "ResourceDefs.h"
  15. #include "Miscellany.h"
  16.  
  17. #include "FileM.h"
  18. #include "EditM.h"
  19. #include "RemindM.h"
  20.  
  21. #include <Desk.h>
  22. #include <ToolUtils.h>
  23. #include "MainMenu.h"
  24.  
  25.  
  26. static void Enable            (short            itemNr,
  27.                              Boolean        enabled);
  28. static void EnableTitle        (MenuHandle        menu,
  29.                              Boolean        enabled);
  30. static void DoApple            (short            itemNr);
  31.  
  32. /*----------*/
  33. void InitTitles (void)
  34. {
  35.     InitFileM ();
  36.     InitEditM ();
  37.     InitRemindM ();
  38.  
  39. } /*InitTitles*/
  40.  
  41. /*----------*/
  42. void LoadMenus (void)
  43. {
  44.     AppleMenu    = GetMenu (MENU_Apple);
  45.     FailNilResource ((Handle)AppleMenu);
  46.     AddResMenu (AppleMenu, 'DRVR');
  47.     FileMenu    = GetMenu (MENU_File);
  48.     EditMenu    = GetMenu (MENU_Edit);
  49.     RemindMenu    = GetMenu (MENU_Remind);
  50.  
  51.     InsertMenu (AppleMenu, 0);
  52.     InsertMenu (FileMenu, 0);
  53.     InsertMenu (EditMenu, 0);
  54.     InsertMenu (RemindMenu, 0);
  55.  
  56.     DrawMenuBar ();
  57. } /*LoadMenus*/
  58.  
  59. /*----------*/
  60. static void DoAbout (void)
  61. {
  62.     short            itemNr;
  63.  
  64.     itemNr = Alert (AboutID, nil);
  65. } /*DoAbout*/
  66.  
  67.  
  68. /*----------*/
  69. static void DoApple (short     itemNr)
  70. {
  71.     Str255            name;
  72.     short            refNum;
  73.  
  74.     switch (itemNr) {
  75.         case AppleAbout:
  76.                 DoAbout ();
  77.             break;
  78.  
  79.         default:
  80.                 GetItem (AppleMenu, itemNr, name);
  81.                 refNum = OpenDeskAcc (name);
  82.             break;
  83.     } /*switch*/
  84. } /*DoApple*/
  85.  
  86. /*----------*/
  87. void DoMenu (long        menuChoice)
  88. {
  89.     short            menuID;
  90.     short            itemNr;
  91.  
  92.     menuID = HiWord (menuChoice);
  93.     itemNr = LoWord (menuChoice);
  94.  
  95.     switch (menuID) {
  96.     case 0:
  97.             /*Do nothing*/;
  98.         break;
  99.     case MENU_Apple:
  100.             DoApple (itemNr);
  101.         break;
  102.     case MENU_File:
  103.             DoFile (itemNr);
  104.         break;
  105.     case MENU_Edit:
  106.             DoEdit (itemNr);
  107.         break;
  108.     case MENU_Remind:
  109.             DoRemind (itemNr);
  110.         break;
  111.  
  112.     } /*switch*/
  113.  
  114.     HiliteMenu (0);
  115. } /*DoMenu*/
  116.  
  117. /*----------*/
  118. MenuHandle        menu;
  119. Boolean            menuBarChanged;
  120.  
  121. /*----------*/
  122. static void Enable    (short        itemNr,
  123.                      Boolean    enabled)
  124. {
  125.     if (enabled) {
  126.         EnableItem  (menu, itemNr);
  127.     } else {
  128.         DisableItem (menu, itemNr);
  129.     }
  130. } /*Enable*/
  131.  
  132. /*----------*/
  133. static void EnableTitle    (MenuHandle        menu,
  134.                          Boolean        enabled)
  135. {
  136.     if (enabled != ((**menu).enableFlags & 1)) {
  137.         menuBarChanged = true;
  138.     }
  139.     if (enabled) {
  140.         EnableItem  (menu, 0);
  141.     } else {
  142.         DisableItem (menu, 0);
  143.     }
  144. } /*EnableTitle*/
  145.  
  146. /*----------*/
  147. void UpdateMenus (void)
  148. {
  149.     WindowPeek        frontPeek;
  150.     Boolean            isFront;            /*is there a front window?*/
  151.     Boolean            isCur;                /*is there a current window?*/
  152.     Boolean            isDirty;            /*is it dirty?*/
  153.     Boolean            hasFile;            /*does it have a file?*/
  154.     Boolean            isSelected;            /*is anything selected?*/
  155.     Boolean            isDesk;                /*is the front window a desk acc?*/
  156.     Boolean            isText;                /*is there a current text field?*/
  157.     Boolean            isScrap;            /*is there any scrap?*/
  158.     menuBarChanged = false;
  159.  
  160.     isFront        = (FrontWindow () != nil);
  161.     isCur        = (curWindow != nil);
  162.     isDirty        = false;
  163.     hasFile        = false;
  164.     isSelected    = false;
  165.     if (isCur) {
  166.         isDirty        =  cur->dirty;
  167.         hasFile        = (cur->fileNum != 0);
  168.     }
  169.  
  170.     isDesk = false;
  171.     if (isFront) {
  172.         frontPeek    = (WindowPeek) FrontWindow ();
  173.         isDesk        = (frontPeek->windowKind < 0);
  174.     }
  175.     isText        = isCur && (cur->text != nil);
  176.     isScrap        = false;
  177.     if (isText) {
  178.         isSelected    = ((**(cur->text)).selStart != (**(cur->text)).selEnd);
  179.         isScrap        = (TEGetScrapLen () > 0);
  180.     }
  181.  
  182.     menu = FileMenu;
  183.     Enable (FileClose,        isFront);
  184.     Enable (FileSave,        isDirty);
  185.     Enable (FileSaveAs,        isCur);
  186.     Enable (FileRevert,        isDirty);
  187.  
  188.     menu = EditMenu;
  189.     if (isFront) {
  190.         Enable (EditUndo,        isDesk);
  191.         Enable (EditCut,        isDesk || isSelected);
  192.         Enable (EditCopy,        isDesk || isSelected);
  193.         Enable (EditPaste,        isDesk || isScrap);
  194.         Enable (EditClear,        isDesk || isSelected);
  195.         Enable (EditSelectAll,    isText);
  196.  
  197.     }
  198.     EnableTitle (EditMenu,     isFront);
  199.  
  200.  
  201.     if (menuBarChanged) {
  202.         DrawMenuBar ();
  203.     }
  204. } /*UpdateMenus*/
  205.  
  206. /* MainMenu */
  207.